import axios from 'axios'
import { ElMessage } from 'element-plus'


// 创建一个 axios 实例
const service = axios.create({
    // baseURL: import.meta.env.DEV ? '/api' : import.meta.env.VITE_BASE_URL, // 所有的请求地址前缀部分
    baseURL: process.env.VUE_APP_BASE_URL, // 后端api根目录
    timeout: 60000, // 请求超时时间毫秒
    withCredentials: false, // 异步请求携带cookie(true)
    headers: {
        // 设置后端需要的传参类型
        'Content-Type': 'application/json',
        'Authorization': 'Bearer ',
        'X-Requested-With': 'XMLHttpRequest',
    },
})

type RawAxiosHeaders = Record<string, string>;

// 请求拦截
service.interceptors.request.use((config) => { // 可使用async await 做异步操作
    // 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
    config.data = config.data || {}
    // 根据custom参数中配置的是否需要token，添加对应的请求头
    // if(config?.custom?.auth) {
    // 	// 可以在此通过vm引用vuex中的变量，具体值在vm.$store.state中
    // 	config.header.token = vm.$store.state.userInfo.token
    // }

    // debugger;
    // let headers = config.headers as RawAxiosHeaders;
    // const token = userStore.token;
    // // JWT 认证
    // headers['Authorization'] = 'Bearer ' + token;
    return config
}, config => { // 可使用async await 做异步操作
    return Promise.reject(config)
})

// 响应拦截
service.interceptors.response.use((response) => {
    /* 对响应成功做点什么 可使用async await 做异步操作*/
    const data = response.data

    // if (!data.Success) {
    //     ElMessage.error(data.Msg)
    //     return new Promise(() => { })


    //     // 存疑代码，保留 
    //     // // 如果需要catch返回，则进行reject
    //     // if (custom?.catch) {
    //     //     return Promise.reject(data)
    //     // } else {
    //     //     // 否则返回一个pending中的promise，请求不会进入catch中
    //     //     return new Promise(() => { })
    //     // }
    // }
    // return data.Data === undefined ? {} : data.Data
    return data;
}, (response) => {
    if (response.statusCode == 401) {
        ElMessage.error('请先登录再操作！')

        // 跳转登录
        // uni.$u.tools.isLogin();
        let nodata = {
            noData: true
        };
        return Promise.resolve(nodata)
    }

    // 对响应错误做点什么 （statusCode !== 200）
    return Promise.reject(response)
})

export default service

